home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 8 / Power CD-ROM 8.iso / prgmming / oldutil / fixdsk.asm < prev    next >
Assembly Source File  |  1994-12-10  |  3KB  |  101 lines

  1. ;===================================================================
  2. ;FIXDSK.ASM - corrects floppy disk timeout problem on speeded-up AT.
  3. ;
  4. ;-------------------------------------------------------------------
  5. ;MODIFIED 12/22/85 by C. Washburn, to use INT 40 instead of INT 13
  6. ;(the relocated diskette code when a fixed disk is present), and to
  7. ;restore the entry code in AH when retrying.
  8. ;
  9. ;Indicated Modifications are (C)Copyright 1985 Clyde Washburn,
  10. ;and are placed in the Public Domain.
  11. ;-------------------------------------------------------------------
  12. ;Create FIXDSK.COM as follows:
  13. ;
  14. ;     MASM FIXDSK.ASM;
  15. ;     LINK FIXDSK;
  16. ;     EXE2BIN FIXDSK.EXE FIXDSK.COM
  17. ;
  18. ;Then place FIXDSK.COM in your AUTOEXEC.BAT file.
  19. ;
  20. ;  (C)Copyright 1985 Michael J. Markowitz
  21. ;             Department of Mathematical Sciences
  22. ;             Loyola University of Chicago
  23. ;             Chicago, IL  60626
  24. ;             (312) 508-3567
  25. ;
  26. ;This program may be freely copied and used for noncommercial purposes.
  27. ;Under no circumstances may a fee be charged for its distribution nor
  28. ;may it be included in any commercial hardware or software package
  29. ;without the written consent of the owner.
  30. ;==================================================================
  31. TIME_OUT equ     80h
  32.  
  33. vectors segment at 0h
  34.      org     40h * 4         ;CW - 40h was 13h
  35. int_40h  label     dword             ;CW - ditto
  36. int_40h_ip     dw     ?         ;CW - ditto
  37. int_40h_cs     dw     ?         ;CW - ditto
  38. vectors ends
  39.  
  40. code     segment
  41.      assume  cs:code
  42.      org     100h
  43. start:     jmp     init
  44.  
  45. ah_cont         db     ?         ;CW - save AH entry contents here
  46. old_int_40h label dword             ;CW - 40h was 13h
  47. old_int_ip     dw     ?
  48. old_int_cs     dw     ?
  49.  
  50. ret_addr label     dword
  51. ret_addr_ip     dw     ?
  52. ret_addr_cs     dw     ?
  53.  
  54. flags         dw     ?
  55.  
  56. main     proc     far
  57.      mov     cs:ah_cont,ah         ;CW - save AH for possible reuse
  58.      pushf                 ;simulate original disk interrupt
  59.      call     old_int_40h         ;CW - 40h was 13h
  60.      pushf                 ;   and save returned flags
  61.      pop     flags
  62.      jnc     fin             ;if no error, return to caller
  63.  
  64.      cmp     ah,TIME_OUT         ;is it a timeout error?
  65.      jne     fin             ;   if no, return to caller
  66.  
  67.      pushf                 ;   if yes, try one more time
  68.      mov     ah,cs:ah_cont         ;CW - restore AH for retry
  69.      call     old_int_40h         ;CW - 40h was 13h
  70.  
  71. fin:     pop     ret_addr_ip         ;simulate an INTR
  72.      pop     ret_addr_cs
  73.      add     sp,2
  74.      push     flags             ;return flags from first ROM
  75.      popf                 ;   BIOS call
  76.      jmp     ret_addr
  77. main     endp
  78.  
  79. init     proc
  80.      assume  ds:vectors         ;establish addressability of
  81.      mov     ax,vectors         ;   interrupt vectors
  82.      mov     ds,ax
  83.  
  84.      mov     ax,int_40h_ip         ;save old disk interrupt vector
  85.      mov     old_int_ip,ax         ;(line above) CW - 40h was 13h
  86.      mov     ax,int_40h_cs         ;CW - 40h was 13h
  87.      mov     old_int_cs,ax
  88.  
  89.      mov     int_40h_ip,offset main  ;replace with dword ;CW - 40h was 13h
  90.      mov     int_40h_cs,cs         ;  pointer to fixdsk ;CW - ditto
  91.  
  92.      mov     dx,offset init
  93.      int     27h             ;terminate leaving main resident
  94. init     endp
  95.  
  96. db     'INT 40H VERSION OF 12/22/85'     ;CW - internal Modification ID
  97.  
  98. code     ends
  99.      end     start
  100.  
  101.